package com.zem.imos.Controller;

import com.zem.imos.Entity.Params.ParamsAdmin;
import com.zem.imos.Entity.Params.ParamsDoctor;
import com.zem.imos.Entity.Params.ParamsPatient;
import com.zem.imos.Entity.RespEntity;
import com.zem.imos.Service.AdminService;
import com.zem.imos.Service.DoctorService;
import com.zem.imos.Service.UserService;
import com.zem.imos.Service.WorkerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

@RestController
public class LoginController {


    @Autowired
    private UserService userService;
    @Autowired
    private AdminService adminService;
    @Autowired
    private WorkerService workerService;
    @Autowired
    private DoctorService doctorService;


    /**
     * 获取登陆的用户信息
     * @author ZEM
     * @Time 2021/11/23
     * @Description 获取登陆的用户信息  有可能是管理员 也有可能能是医生
     * 未测试
     * @test 测试使用医生token查不到
     */
    @GetMapping("/getworkersinfo")
    public RespEntity getworkersinfo (HttpServletRequest request){
        return workerService.getworkersinfo(request);
    }

    /**
     * 患者登陆
     * @author ZEM
     * @Time 2021/11/23
     * @Description 用户登陆返回token  token 有效期30天
     * 测试
     * @test 登录时应该验证角色身份，其他身份也可登录但是token不可用
     */
    @PostMapping("/userlogin")
    public RespEntity userlogin (String username, String password){
       return userService.login(username,password);
    }

    /**
     * 医生登陆
     * @author ZEM
     * @Time 2021/11/21
     * @Description 医生登陆返回token  token 有效期30天
     * 未测试
     * @test 登录时应该验证角色身份，其他身份也可登录但是token不可用
     */
    @PostMapping("/workerslogin")
    public RespEntity workerslogin (String username,String password){
        return doctorService.login(username,password);
    }

    /**
     * 管理员登陆
     * @author ZEM
     * @Time 2021/11/23
     * @Description 管理员登陆返回token  token 有效期30天
     * 测试
     * @test 登录时应该验证角色身份，其他身份也可登录但是token不可用，*同时应该改写last_login_time属性
     */
    @PostMapping("/adminlogin")
    public RespEntity adminlogin (String username,String password){
        return workerService.adminlogin(username,password);
    }

    /**
     * 管理员注册
     * @author ZEM
     * @Time 2021/11/25
     * @Description 注册管理员账号
     * 未测试
     * @test 是否需要添加账号验证为手机号，需要添加判空，应该同时改写admin表
     */
    @PostMapping("/adminlogon")
    public RespEntity adminlogon (ParamsAdmin paramsAdmin){
        return adminService.adminlogon(paramsAdmin);
    }

    /**
     * 医生注册
     * @author ZEM
     * @Time 2021/11/23
     * @Description 注册医生账号
     * 未测试
     * @test 没有与用户注册相同的用户名验证为手机号，且没有用户名判空，应该同时改写doctor表
     */
    @PostMapping("/doctorlogon")
    public RespEntity doctorlogon(ParamsDoctor paramsDoctor) {
        return doctorService.doctorlogon(paramsDoctor);
    }

    /**
     * 患者账号注册
     * @author ZEM
     * @Time 2021/11/23
     * @Description 注册患者账号
     * 未测试
     * @test 应该同时添加表 patient 的属性?
     */
    @PostMapping("/userlogon")
    public RespEntity userlogon(ParamsPatient paramsPatient) {
        return userService.logon(paramsPatient);
    }



}
